Tarantool 2.7.1
Release: v. 2.7.1 Date: 2020-12-30 Tag: 2.7.1-0-g3ac498c9f
2.7.1 is the beta version of the 2.7 release series.
This release introduces 12 new features and resolves 21 bugs since the 2.6.1 version. There can be bugs in less common areas. If you find any, feel free to report an issue on GitHub.
Notable changes are:
- LuaJIT memory profiler;
- Expression evaluation for
replication_synchro_quorum
; - The ALTER TABLE ADD COLUMN statement.
Tarantool 2.x is backward compatible with Tarantool 1.10.x in the binary data layout, client-server protocol, and replication protocol.
Please
upgrade
using the box.schema.upgrade()
procedure to unlock all the new
features of the 2.x series.
- Now it is allowed to define an index without extra braces when there
is only one part:
parts = {field1, type1, ...}
(gh-2866). Read more in the note about index parts declaration. - Bitset index now supports the varbinary type (gh-5392).
- Index-related options now can’t be specified in their definition due to a more pedantic key-parts verification (gh-5473).
- A warning is now logged when schema version is older than last available schema version (gh-4574).
- UUID values created via
uuid
Lua module (require('uuid')
) can now be compared using the comparison operators like<
,>=
, and others (gh-5511). - The new
box.ctl.is_recovery_finished()
function allows user to determine whether memtx recovery is finished. - The
force_recovery
option now ignores errors during snapshot recovery (gh-5422). - Feedback daemon now reports
box.stat().*.total
,box.stat.net().*.total
, andbox.stat.net().*.current
together with the time of report generation. The added fields reside infeedback.stats.box
,feedback.stats.net
, andfeedback.stats.time
(gh-5589).
- Introduced the LuaJIT memory profiler (gh-5442) and the profile parser (gh-5490). Read more: LuaJIT memory profiler.
- The ALTER TABLE ADD COLUMN statement is now supported for empty tables (gh-2349, gh-3075).
It is now possible to specify synchro quorum as a function of a number
N
of registered replicas instead of aconst
number, for example:box.cfg{replication_synchro_quorum = "N/2 + 1"}
Only the non-anonymous bootstrapped replicas amount to
N
. The expression should respect synchro guarantees: at least 50% of the cluster size + 1. The expression value is re-evaluated automatically inside of Tarantool when new replicas appear or old ones are removed (gh-5446).
- If Tarantool crashes, it will now send a crash dump report to the
feedback server. This report contains some fields from
uname
output, build information, crash reason, and a stack trace. You can disable crash reporting withbox.cfg{feedback_crashinfo = false}
(gh-5261).
fiber.cond:wait()
now correctly throws an error when a fiber is cancelled, instead of ignoring the timeout and returning without any signs of an error (gh-5013).- Fixed a memory corruption issue, which was most visible on macOS, but could affect any system (gh-5312).
- A dynamic module now gets correctly unloaded from memory in case of an attempt to load a non-existing function from it (gh-5475).
- A
swim:quit()
call now can’t result in a crash (gh-4570). - Snapshot recovery with no JSONPath or multikey indices involved now has normal performance (gh-4774).
- A false-positive “too long WAL write” message no longer appears for synchronous transactions (gh-5139).
- A
box.ctl.wait_rw()
call could return when the instance was not in fact writable due to having foreign synchronous transactions. As a result, there was no proper way to wait until the automatically elected leader would become writable. Nowbox.ctl.wait_rw()
works correctly (gh-5440). - Fixed a couple of crashes on various tweaks of election mode (gh-5506).
- Now
box.ctl.clear_synchro_queue
tries to commit everything that is present on the node. In order to do so it waits for other instances to replicate the data forreplication_synchro_quorum
seconds. In case timeout passes and quorum wasn’t reached, nothing is rolled back (gh-5435).
- Data changes in read-only mode are now forbidden (gh-5231).
- Query execution now does not occasionally raise an unrelated error “Space ‘0’ does not exist” (gh-5592).
- Coinciding names of temporary files (used to store data during execution) having two instances running on the same machine no longer cause a segfault (gh-5537).
- The return value of
ifnull()
built-in function is now of a correct type. - SQL calling Lua functions with box calls inside can no longer result in a memory corruption (gh-5427).
- An attempt to use a
net.box
connection which is not established yet now results in a correctly reported error (gh-4787). - Fixed a
NULL
dereference on error paths in merger which usually happened on a ‘wrong’key_def
(gh-5450). - Calling
key_def.compare_with_key()
with an invalid key no longer causes a segfault (gh-5307). - Fixed a hang which occured when
tarantool
ran a user script with the-e
option and this script exited with an error (like withtarantool -e 'assert(false)'
) (gh-4983).
- The
on_schema_init
triggers now can’t cause duplicates in primary key (gh-5304).